1장. 백엔드 개발자가 코틀린을 배우는 이유
스프링을 배우기 전에, 왜 코틀린부터 시작할까요?
많은 사람들이 “백엔드 = 자바“라고 생각합니다.
하지만 요즘은 코틀린으로 서버를 만드는 회사가 빠르게 늘고 있습니다.
이 장에서는 코틀린이 어떤 언어인지,
그리고 코드가 실제로 컴퓨터에서 어떻게 실행되는지 살펴봅니다.
마지막에는 개발 환경을 직접 준비하고,
첫 번째 코틀린 프로그램을 실행해 봅니다.
문법을 외우는 장이 아닙니다.
“코틀린이라는 언어의 큰 그림“을 그리는 장이라고 생각해 주세요.
1.1 코틀린은 어떤 언어인가
Kotlin의 등장 배경
코틀린(Kotlin)은 2011년,
젯브레인즈(JetBrains)라는 회사에서 만든 프로그래밍 언어입니다.
젯브레인즈는 개발자들이 많이 쓰는
IntelliJ IDEA라는 프로그램을 만드는 회사입니다.
이 회사는 오랫동안 자바로 프로그램을 만들어 왔습니다.
그런데 자바를 쓰다 보니 불편한 점이 자꾸 눈에 들어왔습니다.
- 같은 코드를 반복해서 길게 써야 한다
- 실수로 인한 오류(특히 null 오류)가 자주 발생한다
- 문법이 예전 방식 그대로라 답답하다
그래서 이런 생각을 하게 됩니다.
“자바와 같이 쓸 수 있으면서,
더 짧고 더 안전한 언어를 우리가 직접 만들자.”
그렇게 태어난 언어가 바로 코틀린입니다.
Kotlin/JVM과 JVM 생태계
코틀린을 이해하려면
먼저 JVM이라는 단어를 알아야 합니다.
JVM은 Java Virtual Machine,
우리말로 “자바 가상 머신“입니다.
이름은 어렵지만 역할은 간단합니다.
JVM은 프로그램을 실제로 실행해 주는
“가상의 컴퓨터“입니다.
우리가 만든 코드는 JVM 위에서 동작합니다.
그래서 윈도우든 맥이든 리눅스든,
JVM만 설치되어 있으면 같은 코드가 그대로 실행됩니다.
자바도 JVM 위에서 돌아가고,
코틀린도 JVM 위에서 돌아갑니다.
이렇게 JVM 위에서 실행되는 코틀린을
Kotlin/JVM이라고 부릅니다.
JVM 위에서 오랫동안 쌓여 온
수많은 라이브러리와 도구들을
JVM 생태계라고 부릅니다.
코틀린은 이 거대한 생태계를
처음부터 그대로 물려받았습니다.
이것이 코틀린의 큰 장점입니다.
Java와 Kotlin의 관계
코틀린은 자바를 “대체“하려고 만든 언어가 아닙니다.
자바와 “함께” 쓰려고 만든 언어에 가깝습니다.
두 언어의 관계를 정리하면 이렇습니다.
- 같은 JVM 위에서 실행된다
- 코틀린에서 자바 코드를 그대로 불러 쓸 수 있다
- 자바에서 코틀린 코드도 불러 쓸 수 있다
- 한 프로젝트 안에 두 언어를 섞어 써도 된다
즉, 코틀린을 배운다고 해서
자바를 버려야 하는 것이 아닙니다.
오히려 자바 세계의 좋은 것들을 그대로 쓰면서,
문법만 더 편하고 안전하게 바꾼 것이라고
이해하면 쉽습니다.
서버 개발에서 Kotlin을 사용하는 이유
그렇다면 백엔드,
즉 서버 개발에서 코틀린을 쓰는 이유는 무엇일까요?
크게 세 가지입니다.
첫째, 코드가 짧고 명확합니다.
같은 기능을 자바보다 훨씬 적은 줄로 표현할 수 있습니다.
코드가 짧아지면 읽기 쉽고 실수도 줄어듭니다.
둘째, null 오류를 크게 줄여 줍니다.
서버에서 가장 자주 터지는 오류 중 하나가
“값이 없는데 값을 쓰려다 나는 오류“입니다.
코틀린은 이 문제를 문법 차원에서 막아 줍니다.
(자세한 내용은 3부에서 집중해서 다룹니다.)
셋째, 스프링과 잘 어울립니다.
백엔드에서 가장 많이 쓰는 스프링 프레임워크가
코틀린을 공식적으로 지원합니다.
그래서 코틀린으로 스프링 서버를 만드는 것이
지금은 아주 자연스러운 선택이 되었습니다.
정리하면,
코틀린은 “자바의 안정성“과 “현대적인 편리함“을
동시에 가진 언어입니다.
1.2 Kotlin 코드는 어떻게 실행되는가
우리가 작성한 코틀린 코드는
사실 컴퓨터가 바로 이해하지 못합니다.
코드가 실행되기까지
몇 단계를 거치는지 살펴봅시다.
소스 코드에서 JVM 바이트코드까지
우리가 키보드로 작성한 코드를
소스 코드(source code)라고 합니다.
사람은 소스 코드를 읽을 수 있지만,
컴퓨터(JVM)는 이 상태로는 이해하지 못합니다.
그래서 소스 코드를
JVM이 이해할 수 있는 형태로 번역해야 합니다.
이 번역된 결과물을
바이트코드(bytecode)라고 부릅니다.
전체 흐름을 그림으로 보면 이렇습니다.
내가 쓴 코틀린 코드 (.kt)
│ 번역
▼
바이트코드 (.class)
│ 실행
▼
JVM
│
▼
프로그램 동작
즉, 코드는 곧바로 실행되는 것이 아니라
“번역 → 실행“의 두 단계를 거칩니다.
JDK와 JVM
여기서 자주 헷갈리는 두 단어를 정리합시다.
바로 JDK와 JVM입니다.
- JVM: 프로그램을 실행해 주는 가상 컴퓨터
- JDK: 코틀린/자바 개발에 필요한 도구 모음
JDK는 Java Development Kit의 줄임말입니다.
안에는 JVM도 들어 있고,
번역에 필요한 도구들도 함께 들어 있습니다.
비유하자면 이렇습니다.
JDK는 “요리 도구 세트 전체“이고,
JVM은 그 안에 든 “가스레인지” 하나입니다.
개발을 하려면 도구 세트 전체가 필요하므로,
우리는 JDK를 설치하게 됩니다.
(설치 방법은 1.3에서 다룹니다.)
Kotlin Compiler
소스 코드를 바이트코드로 번역해 주는 도구를
컴파일러(compiler)라고 합니다.
코틀린 코드를 번역하는 도구는
코틀린 컴파일러(Kotlin Compiler)입니다.
번역하는 이 과정을
컴파일(compile)이라고 부릅니다.
정리하면 이렇습니다.
코틀린 코드 ── 코틀린 컴파일러 ──▶ 바이트코드
(컴파일)
다행히 이 과정은 대부분 자동으로 처리됩니다.
우리가 실행 버튼을 누르면
컴파일과 실행이 알아서 이어집니다.
그래도 “안에서 이런 일이 일어나는구나” 하고
알아 두면 나중에 오류를 이해하기 훨씬 쉽습니다.
Java 라이브러리를 그대로 사용할 수 있는 이유
앞에서 코틀린과 자바가
“같은 바이트코드“로 번역된다고 했습니다.
바로 이 점 때문에
자바 라이브러리를 코틀린에서 그대로 쓸 수 있습니다.
라이브러리(library)란
누군가 미리 만들어 둔 편리한 코드 묶음입니다.
매번 처음부터 만들 필요 없이
가져다 쓸 수 있게 해 줍니다.
자바로 만든 라이브러리든
코틀린으로 만든 라이브러리든,
결국 JVM 위에서는 똑같은 바이트코드일 뿐입니다.
그래서 JVM 입장에서는
둘을 구분할 필요조차 없습니다.
이 덕분에 코틀린은
지금까지 쌓여 온 방대한 자바 라이브러리를
처음부터 전부 활용할 수 있습니다.
1.3 개발 환경 준비하기
이제 직접 코드를 작성할 준비를 해 봅시다.
두 가지만 있으면 됩니다.
- 코드를 작성하는 프로그램 (IntelliJ IDEA)
- 코드를 실행해 주는 도구 (JDK)
IntelliJ IDEA
코드는 메모장으로도 작성할 수 있습니다.
하지만 그렇게 하면 너무 불편합니다.
그래서 우리는 IDE라는 전문 도구를 씁니다.
IDE는 Integrated Development Environment,
우리말로 “통합 개발 환경“입니다.
쉽게 말해,
코드 작성에 필요한 기능을 한곳에 모아 둔
“개발 전용 프로그램“입니다.
코틀린 개발에는 IntelliJ IDEA를 추천합니다.
코틀린을 만든 회사가 함께 만든 도구라
가장 잘 맞기 때문입니다.
하나로 통합된 IntelliJ IDEA
여기서 한 가지 짚고 넘어갈 점이 있습니다.
예전에는 IntelliJ IDEA가
두 종류로 나뉘어 있었습니다.
- Community Edition : 무료지만 기능이 제한적
- Ultimate : 유료지만 기능이 풍부
그래서 “무료 버전을 받아야 하나,
유료 버전을 받아야 하나” 고민하는 경우가 많았습니다.
하지만 2025년 12월(2025.3 버전)부터
이 둘이 하나로 통합되었습니다.
이제는 설치 파일이 하나뿐입니다.
Community와 Ultimate를 고를 필요가 없습니다.
정리하면 이렇습니다.
하나의 IntelliJ IDEA를 설치하고,
그중 기본 기능은 무료로,
고급 기능은 구독으로 쓰는 방식입니다.
무료로 쓸 때의 장점은 다음과 같습니다.
- 로그인이나 인증(활성화) 없이 바로 쓸 수 있다
- 개인 프로젝트뿐 아니라 상업용 프로젝트에도 무료다
- 예전 Community Edition의 기능을 모두 포함한다
- 그보다 더 많은 기능이 무료로 열렸다
무료로 열린 대표적인 기능은 이렇습니다.
- 스프링, Jakarta EE, Thymeleaf 기본 문법 강조
- 스프링 부트 프로젝트 생성 마법사
- 데이터베이스 연결과 스키마 확인
- SQL 언어 지원
이 책에서 배우는 코틀린과,
나중에 배울 스프링 기초까지
모두 무료 범위 안에서 충분히 다룰 수 있습니다.
고급 기능(Ultimate 전용)은 구독이 필요합니다.
처음 설치하면 30일 무료 체험이 제공되고,
체험이 끝나도 코어 Java/Kotlin 개발은
계속 무료로 쓸 수 있습니다.
즉, 지금 우리는 아무것도 결제하지 않고
바로 시작하면 됩니다.
IntelliJ IDEA 설치하기
설치 순서는 간단합니다.
https://www.jetbrains.com/idea/접속- Download 버튼 클릭 (설치 파일은 하나뿐)
- 내려받은 설치 프로그램 실행
- 안내에 따라 설치 진행
설치가 끝나면 IntelliJ IDEA를 실행합니다.
앞서 말했듯 로그인이나 결제는 필요하지 않습니다.
JDK 설치와 버전 확인
앞에서 배운 JDK도 필요합니다.
다행히 요즘 IntelliJ IDEA는
프로젝트를 만들 때 JDK를 함께 내려받아 줍니다.
그래서 대부분 따로 설치하지 않아도 됩니다.
이 책에서는 JDK 17 이상을 기준으로 합니다.
(17이나 21처럼 짝수 위주의 안정 버전을 권장합니다.)
이미 JDK가 설치되어 있는지 궁금하다면
터미널에서 다음 명령으로 확인할 수 있습니다.
java -version
설치되어 있다면
버전 정보가 아래처럼 출력됩니다.
openjdk version "17.0.10" ...
숫자가 17 이상이면 문제없습니다.
확인이 어렵다면 이 단계는 건너뛰어도 됩니다.
프로젝트를 만들 때 IntelliJ가 도와줍니다.
Kotlin 프로젝트 만들기
이제 IntelliJ IDEA를 실행해 봅시다.
- 첫 화면에서 New Project 클릭
- 왼쪽 목록에서 Kotlin 선택
- 프로젝트 이름 입력 (예:
hello-kotlin) - Build system은 우선 IntelliJ 선택
- JDK 항목에서 17 이상 선택
- Create 클릭
여기서 Build system,
즉 빌드 도구는 나중에 자세히 배웁니다. (10부)
지금은 가장 단순한 IntelliJ 방식으로 충분합니다.
복잡한 설정 없이 바로 코드를 실행할 수 있습니다.
Kotlin 코드 실행하기
프로젝트가 만들어지면
왼쪽에 파일 목록이 보입니다.
src 폴더를 열면Main.kt라는 파일이 있을 수 있습니다.
없다면 다음 절에서 직접 만들어 보겠습니다.
코드를 실행하는 방법은 간단합니다.
- 코드 줄 옆의 초록색 ▶ 버튼 클릭
- 또는 파일에서 마우스 오른쪽 클릭 후 Run 선택
실행하면 화면 아래쪽에
결과를 보여 주는 창이 열립니다.
이 창을 콘솔(console)이라고 부릅니다.
이제 진짜 첫 프로그램을 만들어 봅시다.
1.4 첫 번째 Kotlin 프로그램
프로그래밍을 처음 배울 때는
관례처럼 “Hello, World!“를 출력해 봅니다.
우리도 그 전통을 따라가 봅시다.
src 폴더 안에Main.kt 파일을 만들고
아래 코드를 그대로 입력합니다.
fun main() {
println("Hello, World!")
}
실행하면 콘솔에
다음과 같이 출력됩니다.
Hello, World!
축하합니다.
첫 번째 코틀린 프로그램을 완성했습니다.
이제 이 짧은 코드를
한 줄씩 뜯어보겠습니다.
main 함수
fun main() {
println("Hello, World!")
}
main은 특별한 이름의 함수입니다.
함수(function)란
“어떤 일을 하는 코드 묶음“입니다.
(함수는 4장에서 자세히 다룹니다.)
여기서 main이 특별한 이유는,
프로그램이 실행될 때
가장 먼저 이 함수를 찾아 실행하기 때문입니다.
즉, main은 프로그램의 “출발점“입니다.
코드를 하나씩 보면 이렇습니다.
fun: 함수를 만들겠다는 표시main: 함수의 이름(): 함수에 전달하는 값을 담는 자리{ }: 함수가 실제로 할 일을 적는 공간
println은
괄호 안의 내용을 화면에 출력하고
줄을 바꿔 주는 명령입니다.
이름도 “print line”,
즉 “한 줄 출력“에서 왔습니다.
패키지와 파일
코드가 많아지면
파일을 정리할 방법이 필요합니다.
이때 쓰는 것이 패키지(package)입니다.
패키지는 쉽게 말해
“코드 파일을 담는 폴더“입니다.
파일 맨 위에
아래처럼 패키지를 적을 수 있습니다.
package com.example.hello
fun main() {
println("Hello, World!")
}
com.example.hello는
폴더 경로를 점(.)으로 표현한 것입니다.
지금 단계에서는
패키지를 적지 않아도 괜찮습니다.
프로젝트가 커질 때 자연스럽게 쓰게 됩니다.
Kotlin 파일의 특징
여기서 자바를 조금 아는 분이라면
낯선 점을 느꼈을 수 있습니다.
자바에서는 코드를 쓰려면
반드시 클래스(class) 안에 넣어야 합니다.
(클래스는 4부에서 배웁니다.)
하지만 코틀린은 다릅니다.
fun main() {
println("Hello, World!")
}
보다시피 클래스가 하나도 없습니다.
함수를 파일에 바로 적었습니다.
이렇게 클래스 밖에 바로 놓인 함수를
톱레벨 함수(top-level function)라고 부릅니다.
덕분에 코틀린은
간단한 코드를 아주 간단하게 쓸 수 있습니다.
또 한 가지,
코틀린은 줄 끝에 세미콜론(;)을
붙이지 않아도 됩니다.
println("Hello, World!") // 세미콜론이 없어도 됩니다
이런 작은 차이들이 모여
코틀린 코드를 더 깔끔하게 만들어 줍니다.
Java와 다른 첫인상
같은 “Hello, World!“를
자바로 쓰면 이렇게 됩니다.
public class Main {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
코틀린은 이렇습니다.
fun main() {
println("Hello, World!")
}
두 코드를 나란히 보면
차이가 한눈에 들어옵니다.
- 클래스를 감싸지 않아도 된다
public static void같은 긴 표현이 없다System.out.없이 바로 출력한다- 세미콜론이 없다
이것이 코틀린의 첫인상입니다.
같은 일을,
더 짧고 더 읽기 쉽게.
물론 짧다고 무조건 좋은 것은 아닙니다.
앞으로 이 책에서는
“짧으면서도 이해하기 쉬운 코드“를
함께 찾아갈 것입니다.
1장을 마치며
이 장에서 우리는 다음을 배웠습니다.
- 코틀린은 자바와 함께 쓰는,
더 짧고 안전한 JVM 언어라는 점 - 코드는 컴파일을 거쳐
바이트코드로 번역된 뒤 JVM에서 실행된다는 점 - 개발 환경(IntelliJ IDEA, JDK)을 준비하는 방법
- 첫 코틀린 프로그램을 만들고,
자바와의 첫인상 차이를 확인한 것
아직 문법을 몰라도 괜찮습니다.
다음 장부터는 변수와 타입을 시작으로
코틀린 문법을 하나씩 익혀 나갑니다.
큰 그림을 그렸으니,
이제 안으로 들어가 봅시다.